PS 2011 - Laboratorio OS161
Il Sistema SIS161 – OS161 è installato, presso il LABINF, in una macchina virtuale VBOX OSE, con S.O. Linux Ubuntu.
1) Login sotto Fedora.
2) Verificare che nella directory /var/tmp sia presente il file "pso_linux_os161.vdi". In caso positivo passare direttamente al punto 5.
3) Aprire la share di rete "materiale dei corsi" dall'icona presente sul desktop, oppure digitando la stringa "smb://cclix1/corsi" in una qualsiasi finestra del file manager.
4) Copiare il file "pso_linux_os161.vdi" presente nella directory "PSO" nella directoy locale "/var/tmp" del computer in uso. Il trasferimento dura alcuni minuti.
5) Avviare Sun Virtual Box dal menu Applications->System Tools.
6) Creare una nuova macchina virtuale di tipo linux, usando il file "/var/tmp/pso_linux_os161.vdi" come disco virtuale esistente.
7) Modificare le impostazioni della nuova macchina virtuale in modo che risulti come nello screenshot "impostazioni.png" presente sempre nella directory PSO della share dei corsi.
8) Avviare la macchina virtuale.
9) E’ abilitato automaticamente il login con
· USER: pso
· PASSWORD: pso
Il sistema operativo os161 è stato pre-installato nel direttorio os161/os161-base-1.99.05, mentre i pacchetti SW richiesti, binutils, compilatore gcc e debugger gdb, emulatore MIPS, sono installati nella cartella os161/tools.
Si ricorda che il sistema OS161 è attivato sull’emulatore di processore MIPS, SYS161. Al fine di ri-compilare OS161, nonché di fare debug e altre operazioni (ad esempio visualizzazione di file eseguibili), sono necessari programmi previsti per la piattaforma MIPS, che sono stati installati con il prefisso “mips-harvard-os161-“: mips-harvard-os161-gcc, mips-harvard-os161-gdb (eseguibili in /home/pso/ os161/tools/bin).
Il sito web di riferimento è: http://www.eecs.harvard.edu/~syrah/os161/. L’ultima versione è disponibile su http://www.eecs.harvard.edu/~dholland/os161
Un altro sito con informazioni interessanti è quello del corso cs350 dell’università di Waterloo (Canada): http://www.student.cs.uwaterloo.ca/~cs350/common/OS161main.html
Sul desktop della macchina virtuale è presente un link al codice sorgente “navigabile” da un web browser. L’installazione proposta per pso si trova nella cartella /home/pso/os161. Per eventuali installazioni sul proprio PC, occorre seguire le istruzioni presenti su uno dei siti sopra proposti.
Informazioni dettagliate su avvio ed esecuzione di OS161 sono raggiungibili, ad esempio, dal link: “Information about building, running, and debugging OS/161 kernels.”
La cartella iniziale di lavoro proposta è /home/pso/pso-os161/root
Per fare bootstrap di OS161 in ambiente emulato sys161 (da una shell, attivabile mediante applications->accessories->terminal), sono possibili due modalità:
·
Esecuzione normale:
cd /home/pso/pso-os161/root
sys161
kernel
Compare una videata come la seguente
sys161: System/161 release 1.99.04, compiled Mar 28 2009 21:03:10
OS/161 base system version 1.99.05
Copyright (c) 2000, 2001, 2002, 2003, 2004, 2005, 2008, 2009
President and Fellows of Harvard College. All rights reserved.
Put-your-group-name-here's system version 0 (ASST0 #1)
Cpu is MIPS r2000/r3000
336k physical memory available
Device probe...
lamebus0 (system main bus)
emu0 at lamebus0
ltrace0 at lamebus0
ltimer0 at lamebus0
hardclock on ltimer0 (100 hz)
beep0 at ltimer0
rtclock0 at ltimer0
lrandom0 at lamebus0
random0 at lrandom0
lhd0 at lamebus0
lhd1 at lamebus0
lser0 at lamebus0
con0 at lser0
pseudorand0 (virtual)
OS/161 kernel [? for menu]:
Dalla quale sono attivabili comandi (menu con ?). Alcuni comandi (es. quelli selezionabili con ?o) non sono completamente disponibili, in quanto OS161 non è un sistema completo (richiede aggiunte da parte dello studente).
·
Esecuzione con debugger. Occorre evitare di fare il debug
dell’emulatore SYS161. Il debugger (per la piattaforma MIPS) deve
quindi essere eseguito una volta avviato SYS161. A tale scopo
occorrono due processi, uno per eseguire sys161 e uno per
mips-harvard-os161-gdb, comunicanti mediante socket. Si consiglia di
attivare due finestre terminale. Sulla prima, dal direttorio
/home/pso/pso-os161/root eseguire il comando:
sys161
-w kernel
sulla seconda, dallo stesso direttorio
mips-harvard-os161-gdb
kernel
(gdb) dir
../../os161/os161-base-1.99.05/kern/compile/ASST0
(gdb) target
remote unix:.sockets/gdb
attenzione ad utilizzare
lo stesso kernel. Se, dopo aver ricompilato altri kernel (es.
kernel-ASST0, kernel-ASST1, …) si utilizzarà uno di questi, va
usato lo stesso nelle due finestre.
Per eventuale esecuzione di gdb con interfaccia a finestre, sono disponibili ddd (comando ddd –-debugger mips-harvard-os161-gdb), oppure l’editor emacs, da cui è possibile attivare una finestra di debugger.
Sono previsti fino a 5 lavori (assignments), denominati ASSTx (0,1,2,3,4). Si consiglia di iniziare lavorando su assignment 0. Il primo lavoro consiste nell’inserire un messaggio aggiuntivo su video al bootstrap. Per fare questo, si chiede di aggiungere un file hello.c nel direttorio kern/main, nel quale scrivere una funzione hello(), che scrive un messaggio su video utilizzando la funzione kprintf.
Si riportano qui le istruzioni dettagliate
Creare un file kern/startup/hello.c
Scrivere nel file appena creato una funzione hello che utilizza kprintf() per scrivere un messaggio a video.
Modificare kern/startup/main.c inserendo una chiamata a hello()
Modificare kern/conf/conf.kern inserendo il nuovo file hello.c. nell’elenco dei file. Ad esempio
#
# Main/toplevel stuff
#
file startup/main.c
file startup/menu.c
file startup/hello.c
Riconfigurare e ricompilare il sistema
In kern/conf dare il commando
./config ASST0
In kern/compile/ASST0 effettuare
bmake depend
bmake
bmake install
Provare a eseguire os161 per verificare che al bootstrap sia stampato il messaggio.
Built-in thread tests
Quando
si avvia os161, tra le opzioni disponibili dal menu, si possono
avviare i test per thread. Si tratta fi funzioni NON caricate come
eseguibili separati, ma direttamente likati nel kernel.
I
programmi di test dei thread usano sincronizzazione basata su
semafori. Si può tentare di tracciarne l’esecuzione in GDB, per
verificare come lavora lo scheduler, cone sono creati i thread, e
cosa succede al context-switch. Per far questo, si consiglia di
tracciare funzioni quali thread_create thread_fork, thread_yield, …
Osservare, ad esempio, la memoria allocata, lo stack, il context-switch.
Il test tt1 stampa i numeri da 0 a 7 ad ogni loop del thread, tt2 stampa solo ad inizio e fine dei thread (serve a dimostrare che lo scheduler non genera starvation). I threads sono avviati e girano per un po’ di iterazioni. Provare a modificare il comportamento. Il test tt3 utilizza semafori.
Il sorgente di avvio dei test si trova in menu.c
Per fare debug di programmi con thread
Siccome la funzione thread_yield viene chiamata a intervalli random, per generale (e farne il debug) sequenze di esecuzione ripetibili si consiglia di usare un seme per inizializzazione fissa del generatore di numeri casuali (direttiva “random” in sys161.conf). Passare ad autoseed sono quando tutto funziona.